package com.yuzhi.master.conBjMx.service;

import com.yuzhi.common.core.page.PageDataInfo;
import com.yuzhi.master.conBjMx.domain.bo.ConBjMxBo;
import com.yuzhi.master.conBjMx.domain.request.AlarmDashboardReq;
import com.yuzhi.master.conBjMx.domain.request.ConBjMxReq;
import com.yuzhi.master.conBjMx.domain.vo.AlarmEventListVo;
import com.yuzhi.master.conBjMx.domain.vo.AlarmStatisticsVo;
import com.yuzhi.master.conBjMx.domain.vo.AlarmTrendVo;
import com.yuzhi.master.conBjMx.domain.vo.ConBjMxVo;
import com.yuzhi.master.drainAlarmRule.domain.vo.DrainAlarmRuleVo;

import java.time.LocalDateTime;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 报警异常明细表Service接口
 *
 * @author auto code generator
 * @date 2025-07-17
 */
public interface IConBjMxService {

    /**
     * 新增告警记录并转工单
     * @param conBjMxBo  告警记录
     * @param ruleVo  告警规则
     * @return
     */
    Boolean conBjTransferWork(ConBjMxBo conBjMxBo, DrainAlarmRuleVo ruleVo);

    /**
     * 查询报警异常明细表
     */
    ConBjMxVo queryById(String id);

    /**
     * 查询报警异常明细表列表
     */
    PageDataInfo<ConBjMxVo> queryPageList(ConBjMxReq request);

    /**
     * 查询报警异常明细表列表
     */
    List<ConBjMxVo> queryList(ConBjMxReq request);

    /**
     * 新增报警异常明细表
     */
    Boolean insertByBo(ConBjMxBo bo);

    /**
     * 修改报警异常明细表
     */
    Boolean updateByBo(ConBjMxBo bo);

    /**
     * 根据id删除报警异常明细表信息
     */
    Boolean deleteById(String id, Boolean isValid);

    /**
     * 校验并批量删除报警异常明细表信息
     */
    Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);

    List<ConBjMxVo> getTodayRecordsByKeyType(Integer keyType);

    Map<String, Integer> getTodayStatistics();

    List<ConBjMxVo> getfFeyId(ConBjMxBo bo);

    /**
     * 设备在线更新异常告警结束时间和处置状态
     *
     * @param fkId
     * @return
     */
    Boolean updateOnlineConBjMx(String fkId);

    /**
     * 根据fKey更新最新一条记录的报警结束时间和处理状态
     * @param fKey 外键ID
     * @param cbEndTime 报警结束时间
     * @param isCl 处理状态
     * @return 更新结果
     */
    Boolean updateLatestRecordByFKey(String fKey,String bjType ,LocalDateTime cbEndTime, String isCl);

    /**
     * 更新异常告警处置状态为完成
     * @param ids
     * @param isValid
     * @return
     */
    Boolean updateIsClByIds(Collection<String> ids, Boolean isValid);


    /**
     * 告警处理
     *
     * @param request
     * @return
     */
    PageDataInfo alarmEventHandling(ConBjMxReq request);

    List<String> getAlarmDeviceStats();

    /**
     * 获取报警统计信息（四个统计卡片数据）
     * @param request 查询条件
     * @return 统计信息
     */
    AlarmStatisticsVo getAlarmStatistics(AlarmDashboardReq request);

    /**
     * 获取报警趋势数据（近7天趋势图表）
     * @param request 查询条件
     * @return 趋势数据
     */
    AlarmTrendVo getAlarmTrend(AlarmDashboardReq request);

    /**
     * 获取报警事件列表
     * @param request 查询条件
     * @return 事件列表
     */
    AlarmEventListVo getAlarmEventList(AlarmDashboardReq request);
}
